package org.bite.lesson02;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Scanner;

public class Demo210_FindByContent {
    public static void main(String[] args) {
        //1获取用户输入的路径
        System.out.println("请输入要扫描的目录：");
        Scanner scanner = new Scanner(System.in);
        String rootPath = scanner.next();
        //根据用户的输入创建一个文件对象
        File rootFile = new File(rootPath);
        //2判断路径是否有效
        //是否存在
        if(!rootFile.exists()){
            System.out.println("输入的路径不存在");
            return;
        }
        //是否目录
        if(!rootFile.isDirectory()) {
            System.out.println("输入的路径不是一个有效的目录");
            return;
        };
        //获取用户输入的关键字
        System.out.println("输入要查找的关键字：");
        String keyword = scanner.next();
        //校验关键字
        if(keyword == null || keyword.isEmpty()){
            System.out.println("输入的关键字不能为空");
            return;
        }
        //查找过程
        scan(rootFile, keyword);

    }
    private static void scan(File rootFile, String keyword){
        //1 获取扫描目录下的所以子目录和普通文件
        File[] files = rootFile.listFiles();
        //校验数组是否为空
        if(files.length == 0) {
            return;
        }
        //遍历数组中所有文件
        for(File file : files){
            //判断文件是不是普通文件
            if(file.isFile()){
                //判断文件名或者内容是否包含关键字
                boolean bool = checkFile(file, keyword);
                if(!bool){
                    //没有目标文件
                    continue;
                }
                //接收用户的删除指令
                System.out.println("找到文件：" + file.getAbsolutePath() +
                        "包含关键字：" + keyword + ", 是否删除？(Y/N)");
                //接收用户的输入
                Scanner scanner = new Scanner(System.in);
                String opt = scanner.next();
                //判断指令
                if(opt.toLowerCase().equals("y")){
                    //删除操作
                    file.delete();
                    System.out.println("删除文件：" + file.getAbsolutePath()+"成功！");
                }
            }else{
                //file是目录，不是普通文件，递归执行
                scan(file, keyword);
            }
        }
    }

    private static boolean checkFile(File file, String keyword){
        //1 判断文件名是否包含关键字
        //获取文件名
        String fileName = file.getName();
        if(fileName.contains(keyword)){
            //在文件名中找到了关键字
            return true;
        }
        //2 读取文件内容，内容中是否包含关键字
        try(InputStream inputStream = new FileInputStream(file)){
            //创建一个用于保存文件内容的对象
            StringBuilder stringBuilder = new StringBuilder();
            //创建一个Scanner来简化文件读取
            Scanner scanner = new Scanner(inputStream);
            //循环读取内容
            while(true){
                //判断文件是否到结尾
                if(!scanner.hasNextLine()){
                    break;
                }
                //把内容添加到StringBuilder中
                stringBuilder.append(scanner.nextLine());
            }
            //校验内容中是否包含关键字
            if(stringBuilder.indexOf(keyword) > -1){
                return true;
            }
        }catch(IOException e){
            throw new RuntimeException(e);
        }
        return false;
    }
}
